阅读更多
引用
原文:Kanary
作者:SeunAdelekan
翻译:Vincent

译者注:本文主要讲Kanary的安装和依赖等内容,旨在利用高效的方法帮助工程师和开发人员创建基于微服务。以下为译文

License:Apache 2.0 Download:0.9.0
Code Climate:1 issues

Kanary是一个用于构建可扩展和富有表现力的的RESTful API的Kotlin Web框架,基于Apache 2.0,托管在Github上。Kanary是由Iyanu Adelekan创建,他是目前的项目负责人。
fun main(args: Array<String>) {

val app = KanaryApp()
val server = Server()
val userRouter = KanaryRouter()
val userController = UserController()

userRouter on "users/" use userController
userRouter.post("new/", userController::createUser)
userRouter.get("details/", userController::retrieveUser)

app.mount(userRouter)
server.handler = AppHandler(app)
server.listen(8080)

}

安装

安装资源包含在com.iyanuadelekan.kanary包中,您可以在您的应用程序中通过Maven,Gradle和Ivy来导入这个包。在应用程序中引入以下代码:

Maven

包含Jcenter作为插件库
<repositories>
   <repository>
     <id>jcenter</id>
     <name>JCenter</name>
     <url>https://jcenter.bintray.com/</url>
   </repository>
</repositories>

将Kanary添加为项目依赖关系
<dependencies>
  ...
  <dependency>
<groupId>com.iyanuadelekan</groupId>
<artifactId>kanary</artifactId>
<version>0.9.0</version>
  </dependency>
  ...
</dependencies>

Gradle
repositories {
jcenter()
}

dependencies {
compile 'com.iyanuadelekan:kanary:0.9.0'
}

Ivy
<dependency org='com.iyanuadelekan' name='kanary' rev='0.9.0'>
  <artifact name='kanary'></artifact>
</dependency>

其他

对于其他用例,您可以从bintray下载jar

特征
  • 表现路由
  • 专注于代码清晰度
  • 支持控制器
  • 包含HTTP助手
  • 完全支持异步中间件
  • 简洁的英语,如“一线”
  • 可用的动作生命周期回调方法
快速开始

这是详细的[项目包](Packages)

创建一个Kanary应用程序并启动服务器。

通过初始化KanaryApp,创建一个Server对象,一个AppHandler实例,将该实例设置为服务器的处理程序并启动服务器在指定的端口上侦听,创建一个简单的Kanary应用程序。
fun main(args: Array<String>) {
  val app = KanaryApp()
  val server = Server()

  server.handler = AppHandler(app)
  server.listen(8080)
}

创建控制器

控制器是扩展KanaryController类的实例。下面的类是一个简单的控制器类,不执行任何操作。
class DummyController : KanaryController()

创建动作控制器

虽然上述控制器类是正确的,但通常您需要指定控制器中的动作来路由请求。

一个动作是一个控制器函数,它将三个参数作为参数:
  • 一个请求的实例(一个可变的请求对象)
  • 一个HttpServletRequest的实例(一个不可变的请求对象)
  • HttpServletResponse(响应对象)的一个实例
在下面的控制器中显示一个有效的动作:
class UserController : KanaryController() {

fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
// action code goes here
}

}

动作控制器生命周期的回调

在KanaryController中可以声明两个不同的动作生命周期回调。它们分别是:
  • beforeAction 如果声明,则在执行动作之前立即执行
  • afterAction 如果声明,则在执行动作后立即执行
声明这两个回调与在控制器中声明一个函数一样简单:
class UserController : KanaryController() {

override fun beforeAction(request: HttpServletRequest, response: HttpServletResponse?) {
println("I execute before anything else!")
}

override fun afterAction(request: HttpServletRequest, response: HttpServletResponse?) {
println("I execute once an action is completed!")
}

fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
// action code goes here
}

}

路由

所有路由由一个或多个指定的路由器完成。路由是KanaryRouter的一个实例:
val userRouter = KanaryRouter()

声明路由路径

userRouter on "users/" use userController //router uses userController to cater for all routes prefixed by '/users'
userRouter.post("new/", userController::createUser) //maps POST '/users/new' to the createUser action in userController

以上也可以用:
userRouter.post("users/new/", userController::createUser, userController)

安装路由器到应用程序

单个路由可以挂载到KanaryApp的一个实例上,如下所示:
app.mount(userRouter)

可以随时安装无数路由:
app.mount(routerA, routerB, routerC, ..., routerN)

中间件

所有的中间件都采用lambda的形式。HttpServletRequest的单个可空的实例被传递给添加到应用程序的每个中间件。
app.use { println("I'm middleware!") }
app.use { println("Request path info: ${it.pathInfo}") }

可以随时添加多个中间件:
app.use({ println("I'm middleware!") }, { println("Request path info: ${it.pathInfo}") } )

重要的是,要注意所有中间件以与主应用程序线程并行的非阻塞方式执行。
捆绑中间件

与Kanary捆绑在一起的唯一中间件是“simpleConsoleRequestLogger”。它打印出关于向控制台收到的每个请求的简洁信息。
app.use(simpleConsoleRequestLogger)

处理请求和响应

处理请求

在大多数情况下,请求处理通过创建一个HttpServletRequest来完成一个动作响应。
这个 HttpServletRequest是Java的一个对象,它是Kanary特定的帮助函数。
提供的这些附加功能包括:

一个可变请求对象以请求实例的形式显示。HttpServletRequest请求实现,因此具有类似于传递给HttpServletRequest实例拥有的行为和特征。除了上表所示的功能外,传递的请求实例有:

响应请求

使用HttpServletResponse将一个动作响应发送给客户端。除了此实例暴露的所有特征和行为之外,还可以使用以下Kanary特定的帮助函数:

除“sendFile”之外的所有功能都可以用中缀符号(在Kanary中编写代码的推荐方式)编写。这样可以写出清晰和表现力强的代码来回应客户。这样就可以向客户端发送纯文本消息:
class UserController : KanaryController() {

fun createUser(baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
response withStatus 201 send "User successfully created!"
baseRequest.done()
}

}

Packages(包)

Dependencies(依赖)
Philosophy(原理)

创建Kanary是为了能够用Kotlin编程语言实现稳定且非冗长的RESTful API。

公约与配置

Kanary旨在利用高效的方法帮助工程师和开发人员创建基于微服务的应用程序。对于这种方法,开发人员不会强制约定。实施应用程序的方法由实施者自行决定。

Road map(路线图)
  • 增加测试
  • 创建大量示例应用程序,演示使用Kanary
  • 创建cli工具以支持快速创建Kanary应用程序
  • 添加备份加载功能,更改和保存应用程序文件
  • 管理通知邮件
  • 对于那些希望以MVC为导向的方式使用Canary的模板引擎系统的实现
  • [*]添加对其他流行应用程序服务器(如Tomcat和Netty)的支持
  • 大小: 111.1 KB
  • 大小: 9.4 KB
  • 大小: 13.6 KB
  • 大小: 7.4 KB
  • 大小: 39.4 KB
  • 大小: 19 KB
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Kanary:用于在KotlinJava中构建REST API的极简Web框架

    Kanary:用于在KotlinJava中构建REST API的极简Web框架

  • kanary:Kubernetes Operator使用HAProxy管理金丝雀部署

    Kanary:Kubernetes的Canary发布运​​营商 该Kubernetes运营商旨在使用HAProxy容器作为L4(TCP)负载均衡器来管理Canary发布部署操作员安装kubectl apply -f ...简称ky kubectl get kanaryNAME AG

  • Api-Kanary.zip

    Api-Kanary.zip,在kotlin/java.kanary中构建restapi的极简web框架,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了...

  • Kanary-crx插件

    语言:English (United States) Kanary隐私权政策解析器 Web扩展,可获取您的URL并将其发送到基于R的文本挖掘工具。

  • Android-Kanary用于构建

    Kanary:用于构建

  • Kotlin

    标题历史简介 Kotlin是JetBrains团队开发的一门基于 JVM 的,现代的、注重工程实用性的静态类型编程语言。Kotlin可以编译成Java字节码,也可以编译成...语法简单优雅、表现力丰富、抽象扩展方便、代码可重用性好,...

  • 云原生生态周报 Vol. 6 | KubeCon EU 特刊

    KEDA 在“事件驱动的水平扩展”这一细分领域,跟 Kubernetes 项目本身有着更好的集成度,更多的强调可扩展性和接口的设计,显然也有推动这一领域技术标准化的含义。 相关链接: Microsoft 发布的 Service Mesh ...

  • 安装NumPy教程-详细版

    附件是安装NumPy教程_详细版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

  • 语音端点检测及其在Matlab中的实现.zip

    语音端点检测及其在Matlab中的实现.zip

  • C#文档打印程序Demo

    使用C#完成一般文档的打印,带有页眉,页脚文档打印,表格打印,打印预览等

  • DirectX修复工具-4-194985.zip

    directx修复工具 DirectX修复工具(DirectX repair)是系统DirectX组件修复工具,DirectX修复工具主要是用于检测当前系统的DirectX状态,若发现异常情况就可以马上进行修复,非常快捷,使用效果也非常好。

  • Python手动实现人脸识别算法

    人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在0.6 以下都可以被认为是同一张脸 人脸识别的主要步骤 1 获得人脸图片 2 将人脸图片转为128D的矩阵(这个也就是人脸特征的一种数字化表现) 3 保存人脸128D的特征到文件中 4 获取其他人脸转为128D特征通过欧式距离算法与我们保存的特征对比,如果差距在0.6以下就说明两张脸差距比较小

  • 全国大学生信息安全竞赛知识问答-CISCN 题库.zip

    ciscn 全国大学生信息安全竞赛知识问答-CISCN 题库.zip

  • JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译).zip

    JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)JAVA+SQL离散数学题库管理系统(源代码+LW+外文翻译)

  • strcmp函数应用.zip

    strcmp函数应用.zip

  • 蓝桥杯单片机第十一届国赛设计题试做

    蓝桥杯单片机第十一届国赛设计题试做

  • 基于MATLAB的pca人脸识别.zip

    基于MATLAB的pca人脸识别.zip

  • 520.html

    520.html

  • JAVA在线考试管理系统(源代码+LW+开题报告+外文翻译+英文文献+答辩PPT).zip

    JAVA在线考试管理系统(源代码+LW+开题报告+外文翻译+英文文献+答辩PPT)

Global site tag (gtag.js) - Google Analytics